#include "led.h"

#include <libopencm3/stm32/rcc.h>
// 定义 LED 引脚
// 这里假设 A5, A6, A7 对应 GPIOA 的 5, 6, 7 引脚
const uint8_t led_pins[] = {GPIO5, GPIO6, GPIO7};
const int num_leds = sizeof(led_pins) / sizeof(led_pins[0]);

// 初始化 LED 引脚
void led_gpio_setup(void) {
    // 使能 GPIOA 时钟
    rcc_periph_clock_enable(RCC_GPIOA);

    // 将所有 LED 引脚设置为输出模式
    for (int i = 0; i < num_leds; i++) {
//        / 转换为STM32F407的等效配置
        gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, led_pins[i]);
        gpio_set_output_options(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ, led_pins[i]);
    }
}

// 点亮所有 LED
void led_turn_on(void) {
    for (int i = 0; i < num_leds; i++) {
        gpio_set(GPIOA, led_pins[i]);
    }
}

// 熄灭所有 LED
void led_turn_off(void) {
    for (int i = 0; i < num_leds; i++) {
        gpio_clear(GPIOA, led_pins[i]);
    }
}

// 更新 LED 状态
void led_update_state(uint8_t state) {
    if (state) {
        led_turn_on();
    } else {
        led_turn_off();
    }
}